package com.atguigu.lease.web.admin.interceptors;

import com.atguigu.lease.common.busiexception.BusiException;
import com.atguigu.lease.common.context.LoginUser;
import com.atguigu.lease.common.context.LoginUserContext;
import com.atguigu.lease.common.result.ResultCodeEnum;
import com.atguigu.lease.common.utils.JwtUtil;
import io.jsonwebtoken.Claims;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;

@Component
public class AuthenticationAdminInterceptor implements HandlerInterceptor {

    //    在这里解析token
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//        请求头数据在requet里
        String token = request.getHeader("access_token");
        if(token == null ){
            throw new BusiException(ResultCodeEnum.TOKEN_INVALID);
        }else{
//            不为空才去调用解析token
            Claims claims = JwtUtil.parseJwt(token);
            Long userId = claims.get("userId", Long.class);

            String userName = claims.get("userName", String.class);

            LoginUser loginUser = new LoginUser();
            loginUser.setUserId(userId);
            loginUser.setUserName(userName);
//            放入threadLocal
            LoginUserContext.setContext(loginUser);
            return true;
        }
    }

//    善后处理，清除ThreadLocal
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        LoginUserContext.removeContext();
    }
}
